#!/usr/bin/env python

import argparse
import os
from exporter.ExporterFactory import ExporterFactory

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='导出Excel配置')
    parser.add_argument('--lang', choices=['lua', 'json', 'js', 'ts'], required=True, help='导出类型,目前支持:lua, js, json, ts')
    parser.add_argument('--target', '-t', choices=['server', 'client'], default='client', help='导出目标 (默认: client)')
    parser.add_argument('-c', action='store_const', const='client', dest='target', help='导出客户端配置 (等同于 --target=client)')
    parser.add_argument('-s', action='store_const', const='server', dest='target', help='导出服务端配置 (等同于 --target=server)')
    parser.add_argument('--force', '-f', action='store_true', help='强制覆盖已存在的文件')
    parser.add_argument('source_dir', help='Excel文件源目录路径')
    parser.add_argument('output_dir', help='输出目录路径')
    parser.add_argument('--suffix', default='', help='导出文件名字的后缀')
    parser.add_argument('--prefix', default='', help='导出文件的前缀，可以用/把导出文件放入指定目录中')
    parser.add_argument('--case', default='default', choices=['default', 'camel', 'camel_upper', 'pascal', 'lower', 'upper'], 
        help='导出文件名字的命名风格, 默认为原文件名, 可选: default(原文件名), camel(小驼峰), camel_uppder(大驼峰), pascal(帕斯卡,camel_upper的别名), snake(蛇形)')

    args = parser.parse_args()

    # 确保源目录和输出目录存在
    if not os.path.exists(args.source_dir):
        raise ValueError(f"源目录不存在: {args.source_dir}")
    os.makedirs(args.output_dir, exist_ok=True)
    print(f"开始导出配置。源目录: {args.source_dir}, 输出目录: {args.output_dir}, 语言: {args.lang}, 目标: {args.target}")

    exporter = ExporterFactory.create_exporter(args.lang)
    exporter.source = args.source_dir
    exporter.dest = args.output_dir
    exporter.target = args.target
    exporter.force = args.force
    exporter.suffix = args.suffix
    exporter.prefix = args.prefix
    exporter.case = args.case
    exporter.export()

    print(f"导出完成。源目录: {args.source_dir}, 输出目录: {args.output_dir}, 语言: {args.lang}, 目标: {args.target}")